<?php

require_once(FILE_DB_STATBEDRIJFSONDERDEEL);

class DbStatLaag extends DbStatStatistiekData {

    public $bedrijfsonderdeelLijst = array(); //Array met regioBedrijf objecten
    private $laagID; //int
    protected $aantalGemistMetRedenPercentage, $aantalGevoldPercentage, $aantalGemistPercentage;
    protected $aantalGemist, $aantalGevolgd, $aantalGemistMetReden; //integers

    /**
     * constructor
     * @param int $beginFilterPeriodeMaand de maand vanaf wanneer gefilterd moet worden
     * @param int $beginFilterPeriodeJaar de jaar vanaf wanneer gefilterd moet worden
     * @param int $eindFilterPeriodeMaand de maand tot wanneer gefilterd moet worden
     * @param int $eindFilterPeriodeJaar de jaar tot wanneer gefilterd moet worden
     * @since Version 1.0
     */

    public function __construct($beginFilterPeriodeMaand, $beginFilterPeriodeJaar, $eindFilterPeriodeMaand, $eindFilterPeriodeJaar, $laagID, $naam, $formulierType) {
        parent::__construct();
        $this->setLaagID($laagID);
        $this->setNaam($naam);
        $this->setFormulierType($formulierType);
        $this->setBeginFilterPeriodeMaand($beginFilterPeriodeMaand);
        $this->setBeginFilterPeriodeJaar($beginFilterPeriodeJaar);
        $this->setEindFilterPeriodeMaand($eindFilterPeriodeMaand);
        $this->setEindFilterPeriodeJaar($eindFilterPeriodeJaar);
        $this->vulBedrijfsonderdeelLijst(); //vult de regioBedrijfLijst met DbStatRegioBedrijf objecten.
    }

    /**
     * pakt 1 specifieke regioBedrijf uit de regioBedrijflijst op basis van de ingegeven naam
     * @param String $naam de naam van de regioBedrijf die je wilt hebben
     * @uses DbStatRegioBedrijf.php
     * @return void
     */
    public function getSpecifiekeBedrijfsonderdeel($naam) {
        $bedrijfsonderdeel = $this->bedrijfsonderdeelLijst;

        $maxloop = count($bedrijfsonderdeel);
        for ($nummer = 0; $nummer < $maxloop; $nummer++) {
            if ($bedrijfsonderdeel[$nummer]->getNaam() == $naam) {
                return $bedrijfsonderdeel[$nummer];
            }
        }
    }

    /**
     * vult de regioBedrijflijst met DbStatRegioBedrijf objecten, en geeft ze de benodigde gegevens mee.
     * @name vulRegioBedrijfLijst
     * @uses DbStatRegioBedrijf.php
     * @since Version 1.0
     * @return void
     */
    protected function vulBedrijfsonderdeelLijst() {

        $query = "SELECT DISTINCT id, beschrijving FROM bedrijfsonderdeel WHERE laag_id = " . $this->getLaagID();
        if (isset($_POST['advsort'])) {
            if ($_POST['advsort'] == 'bedrijfsonderdeel') {
                $query .=" AND beschrijving=" . $_POST['sortData'];
            }
        }

        if (!$this->dbQuery($query)) {
            echo(STAT_ERROR_REGIOBEDRIJF_VULFOUT);
        }
        $regioBedrijf = $this->dbFetchAll();

        $maxloop = count($regioBedrijf);
        for ($loop = 0; $loop < $maxloop; $loop++) { //1 regioBedrijf
            $this->bedrijfsonderdeelLijst[$loop] = new DbStatBedrijfsonderdeel($this->beginFilterPeriodeMaand, $this->beginFilterPeriodeJaar, $this->eindFilterPeriodeMaand, $this->eindFilterPeriodeJaar, $regioBedrijf[$loop]['id'], $regioBedrijf[$loop]['beschrijving'], $this->getFormulierType());
            $this->aantalGevolgd += $this->bedrijfsonderdeelLijst[$loop]->getAantalGevolgd();
            $this->aantalGemist += $this->bedrijfsonderdeelLijst[$loop]->getAantalGemist();
            $this->aantalGemistMetReden += $this->bedrijfsonderdeelLijst[$loop]->getAantalGemistMetReden();
        }

        $totaal = $this->aantalGevolgd + $this->aantalGemist + $this->aantalGemistMetReden;
        $this->aantalGemistPercentage = $this->calculatePercentage($this->aantalGemist, $totaal);
        $this->aantalGemistMetRedenPercentage = $this->calculatePercentage($this->aantalGemistMetReden, $totaal);
        $this->aantalGevoldPercentage = $this->calculatePercentage($this->aantalGevolgd, $totaal);
    }

    public function getAantalGemistMetRedenPercentage() {
        return $this->aantalGemistMetRedenPercentage;
    }

    public function setAantalGemistMetRedenPercentage($aantalGemistMetRedenPercentage) {
        $this->aantalGemistMetRedenPercentage = $aantalGemistMetRedenPercentage;
    }

    public function getAantalGevoldPercentage() {
        return $this->aantalGevoldPercentage;
    }

    public function setAantalGevoldPercentage($aantalGevoldPercentage) {
        $this->aantalGevoldPercentage = $aantalGevoldPercentage;
    }

    public function getAantalGemistPercentage() {
        return $this->aantalGemistPercentage;
    }

    public function setAantalGemistPercentage($aantalGemistPercentage) {
        $this->aantalGemistPercentage = $aantalGemistPercentage;
    }

    public function getAantalGemist() {
        return $this->aantalGemist;
    }

    public function setAantalGemist($aantalGemist) {
        $this->aantalGemist = $aantalGemist;
    }

    public function getAantalGevolgd() {
        return $this->aantalGevolgd;
    }

    public function setAantalGevolgd($aantalGevolgd) {
        $this->aantalGevolgd = $aantalGevolgd;
    }

    public function getAantalGemistMetReden() {
        return $this->aantalGemistMetReden;
    }

    public function setAantalGemistMetReden($aantalGemistMetReden) {
        $this->aantalGemistMetReden = $aantalGemistMetReden;
    }

    public function getBedrijfsonderdeelLijst() {
        return $this->bedrijfsonderdeelLijst;
    }

    public function setBedrijfsonderdeelLijst($bedrijfsonderdeelLijst) {
        $this->bedrijfsonderdeelLijst = $bedrijfsonderdeelLijst;
    }

    public function getLaagID() {
        return $this->laagID;
    }

    public function setLaagID($laagID) {
        $this->laagID = $laagID;
    }

    /**
     * berekend het percentage dat aantalVanTotaal is tov het totaal
     * @name calculatePercentage
     * @param int $cijferVanTotaal het kleinste getal
     * @param int $totaal het totaal 
     * @since Version 1.0
     * @return double $resultaat het resultaat, of 0.
     */
    private function calculatePercentage($cijfer, $totaal) { //int, int
        if ($cijfer > 0) {
            $calc = ($totaal / $cijfer) * 100;
            return(round($calc, 1, PHP_ROUND_HALF_DOWN));
        } else {
            return 0;
        }
    }

}

?>
